What is @scure/bip39?
@scure/bip39 is an npm package that provides functionality for generating and working with BIP-39 mnemonic phrases, which are used in the creation of cryptocurrency wallets. It allows for the generation of mnemonic phrases, conversion between mnemonic phrases and seed values, and validation of mnemonic phrases.
What are @scure/bip39's main functionalities?
Generate Mnemonic
This feature allows you to generate a new BIP-39 mnemonic phrase using the English wordlist.
const { generateMnemonic } = require('@scure/bip39');
const { wordlist } = require('@scure/bip39/wordlists/english');
const mnemonic = generateMnemonic(wordlist);
console.log(mnemonic);
Mnemonic to Seed
This feature converts a BIP-39 mnemonic phrase to a seed value, which can be used to derive keys for cryptocurrency wallets.
const { mnemonicToSeedSync } = require('@scure/bip39');
const mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const seed = mnemonicToSeedSync(mnemonic);
console.log(seed.toString('hex'));
Validate Mnemonic
This feature checks if a given BIP-39 mnemonic phrase is valid according to the specified wordlist.
const { validateMnemonic } = require('@scure/bip39');
const { wordlist } = require('@scure/bip39/wordlists/english');
const mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const isValid = validateMnemonic(mnemonic, wordlist);
console.log(isValid);
Other packages similar to @scure/bip39
bip39
The 'bip39' package is a popular alternative for working with BIP-39 mnemonic phrases. It provides similar functionality, including generating mnemonics, converting them to seeds, and validating them. It is widely used in the cryptocurrency community.
bitcore-mnemonic
The 'bitcore-mnemonic' package is part of the Bitcore library and offers functionality for BIP-39 mnemonic phrases. It allows for the generation, validation, and conversion of mnemonics to seeds. It is well-integrated with other Bitcore components for building cryptocurrency applications.
ethers
The 'ethers' package is a comprehensive library for interacting with the Ethereum blockchain. It includes functionality for generating and managing BIP-39 mnemonic phrases, among many other features related to Ethereum development. It is a good choice if you need a broader set of tools for Ethereum.
scure-bip39
Audited & minimal JS implementation of BIP39 mnemonic phrases.
- 🔒 Audited by an independent security firm
- 🔻 Tree-shakeable: unused code is excluded from your builds
- 📦 ESM and common.js
- ➰ Only 2 audited dependencies by the same author:
noble-hashes and scure-base
- 🪶 37KB with all deps bundled and 279KB with wordlists: much smaller than similar libraries
Check out scure-bip32 if you need
hierarchical deterministic wallets ("HD Wallets").
This library belongs to scure
scure — audited micro-libraries.
Usage
npm install @scure/bip39
We don't provide source maps.
Wordlists are large, including source maps would double package size.
import * as bip39 from '@scure/bip39';
import { wordlist } from '@scure/bip39/wordlists/english';
const mn = bip39.generateMnemonic(wordlist);
console.log(mn);
const ent = bip39.mnemonicToEntropy(mn, wordlist)
bip39.entropyToMnemonic(ent, wordlist);
bip39.validateMnemonic(mn, wordlist);
await bip39.mnemonicToSeed(mn, 'password');
bip39.mnemonicToSeedSync(mn, 'password');
This submodule contains the word lists defined by BIP39 for Czech, English, French, Italian, Japanese, Korean, Portuguese, Simplified and Traditional Chinese, and Spanish. These are not imported by default, as that would increase bundle sizes too much. Instead, you should import and use them explicitly.
function generateMnemonic(wordlist: string[], strength?: number): string;
function mnemonicToEntropy(mnemonic: string, wordlist: string[]): Uint8Array;
function entropyToMnemonic(entropy: Uint8Array, wordlist: string[]): string;
function validateMnemonic(mnemonic: string, wordlist: string[]): boolean;
function mnemonicToSeed(mnemonic: string, passphrase?: string): Promise<Uint8Array>;
function mnemonicToSeedSync(mnemonic: string, passphrase?: string): Uint8Array;
All wordlists:
import { wordlist as czech } from '@scure/bip39/wordlists/czech';
import { wordlist as english } from '@scure/bip39/wordlists/english';
import { wordlist as french } from '@scure/bip39/wordlists/french';
import { wordlist as italian } from '@scure/bip39/wordlists/italian';
import { wordlist as japanese } from '@scure/bip39/wordlists/japanese';
import { wordlist as korean } from '@scure/bip39/wordlists/korean';
import { wordlist as portuguese } from '@scure/bip39/wordlists/portuguese';
import { wordlist as simplifiedChinese } from '@scure/bip39/wordlists/simplified-chinese';
import { wordlist as spanish } from '@scure/bip39/wordlists/spanish';
import { wordlist as traditionalChinese } from '@scure/bip39/wordlists/traditional-chinese';
Security
To audit wordlist content, run node scripts/fetch-wordlist.js
.
The library has been independently audited:
- at version 1.0.0, in Jan 2022, by cure53
The library was initially developed for js-ethereum-cryptography.
At commit ae00e6d7,
it was extracted to a separate package called micro-bip39
.
After the audit we've decided to use @scure
NPM namespace for security.
License
MIT License
Copyright (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com)